package DAO;

import static Conexao.ConexaoBancoDeDados.getConexao;
import Model.BeanFuncionario;
import Model.EnumTipoFuncionario;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author ebastos
 */
public class DAOFuncionario {

    public DAOFuncionario() {
    }

    private BeanFuncionario GetFuncionario(ResultSet rs) {
        try {
            if (rs.first()) {
                BeanFuncionario funcionario = new BeanFuncionario();
                funcionario.setMATRICULA(rs.getInt("MATRICULA"));
                funcionario.setSenha(rs.getString("senha"));
                funcionario.setCPF(rs.getLong("CPF"));
                funcionario.setTipo(rs.getInt("tipo"));
                if (funcionario.getTipo() == 1) {
                    funcionario.setTipofuncionario(EnumTipoFuncionario.GERENTE);
                } else {
                    funcionario.setTipofuncionario(EnumTipoFuncionario.FUNCIONARIO);
                }
                return funcionario;
            } else {
                //Não retornou nenhuma linha
                return null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }

    private ArrayList<BeanFuncionario> GetFuncionarios(ResultSet rs) {
        try {
            if (rs.first()) {
                ArrayList<BeanFuncionario> retorno = new ArrayList<>();
                BeanFuncionario funcionario = new BeanFuncionario();
                funcionario.setMATRICULA(rs.getInt("MATRICULA"));
                funcionario.setSenha(rs.getString("senha"));
                funcionario.setCPF(rs.getLong("CPF"));
                funcionario.setTipo(rs.getInt("tipo"));
                if (funcionario.getTipo() == 1) {
                    funcionario.setTipofuncionario(EnumTipoFuncionario.GERENTE);
                } else {
                    funcionario.setTipofuncionario(EnumTipoFuncionario.FUNCIONARIO);
                }
                retorno.add(funcionario);
                while (rs.next()) {
                    funcionario = new BeanFuncionario();
                    funcionario.setMATRICULA(rs.getInt("MATRICULA"));
                    funcionario.setSenha(rs.getString("senha"));
                    funcionario.setCPF(rs.getLong("CPF"));
                    funcionario.setTipo(rs.getInt("tipo"));
                    if (funcionario.getTipo() == 1) {
                        funcionario.setTipofuncionario(EnumTipoFuncionario.GERENTE);
                    } else {
                        funcionario.setTipofuncionario(EnumTipoFuncionario.FUNCIONARIO);
                    }
                }
                return retorno;
            } else {
                //Não retornou nenhuma linha
                return null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }

    public BeanFuncionario RetornaFuncionario(long CPF) {
        try (Connection conn = getConexao()) {
            String sql;
            sql = "SELECT * FROM funcionario WHERE CPF = ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, String.valueOf(CPF));

            ResultSet rs = ps.executeQuery();
            return GetFuncionario(rs);
        } catch (SQLException e) {
            return null;
        }
    }

    public BeanFuncionario RetornaFuncionario(int MATRICULA) {
        try (Connection conn = getConexao()) {
            String sql;
            sql = "SELECT * FROM funcionario WHERE MATRICULA = ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, String.valueOf(MATRICULA));

            ResultSet rs = ps.executeQuery();
            return GetFuncionario(rs);
        } catch (SQLException e) {
            return null;
        }
    }

    public BeanFuncionario ValidaLogin(int matricula, String senha) {
        try (Connection conn = getConexao()) {
            String sql;
            sql = "SELECT * FROM funcionario WHERE MATRICULA = ? AND senha = ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, String.valueOf(matricula));
            ps.setString(2, String.valueOf(senha));

            ResultSet rs = ps.executeQuery();
            return GetFuncionario(rs);
        } catch (SQLException e) {
            return null;
        }
    }

    public void Atualizar(BeanFuncionario funcionario) {
        try (Connection conn = getConexao()) {
            String sql;
            sql = "UPDATE funcionario SET senha = ?, CPF = ?, tipo = ? WHERE MATRICULA = ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, String.valueOf(funcionario.getSenha()));
            ps.setString(2, String.valueOf(funcionario.getCPF()));
            ps.setString(3, String.valueOf(funcionario.getTipo()));
            ps.setString(4, String.valueOf(funcionario.getMATRICULA()));
            ps.executeQuery();
        } catch (SQLException e) {
        }
    }

    public void Inserir(BeanFuncionario funcionario) {
        try (Connection conn = getConexao()) {
            String sql;
            sql = "INSERT INTO funcionario VALUES(?, ?, ?, ?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, String.valueOf(funcionario.getMATRICULA()));
            ps.setString(2, String.valueOf(funcionario.getSenha()));
            ps.setString(3, String.valueOf(funcionario.getCPF()));
            ps.setString(4, String.valueOf(funcionario.getTipo()));
            ps.executeQuery();
        } catch (SQLException e) {
        }
    }

    public void Remover(BeanFuncionario funcionario) {
        try (Connection conn = getConexao()) {
            String sql;
            sql = "DELETE funcionario WHERE MATRICULA = ?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, String.valueOf(funcionario.getMATRICULA()));
            ps.executeQuery();
        } catch (SQLException e) {
        }
    }
}
